module AjaxHelper
  def block_screen(opts={:div_id=>'block',:loading_img=>'loading.gif',:msg=>'Procesando...'})
    html=<<HTML
<script type="text/javascript">    
    function blockScreen(){
      $.blockUI({ message: $('.#{opts[:div_id]}'),css: {border: 'none',padding: '15px',
            backgroundColor: '#000','-webkit-border-radius': '10px','-moz-border-radius': '10px',
            opacity: .5,color: '#fff'}});
    }
    function unBlockScreen(){
      $.unblockUI();
    }
</script>
<div style="display: none">
  <div class="#{opts[:div_id]}">
    <big>#{opts[:msg]}</big> #{image_tag opts[:loading_img]}<span id="proceso"></span>
  </div>
</div>
HTML
    html
  end
  # == Descripcion
  # Crea un componente *JQuery* para hacer un live query
  # == Parametros
  # *hidden_id*:: nombre del elemento hidden que guardara el valor seleccionado
  # *input*:: html del objeto input que se utilizara como input de datos
  # *url*:: Url que realizará la busqueda y devolvera el *JSON* necesario
  # *extra*:: Nombre del parametro extra a utilizar
  # *extra_jquery*:: Instruccion javascript a utilizar para leer el parametro *extra* a utilizar
  # *value*:: Valor inicial para el componente(en caso de hacer una edición)
  #
  # == Ejemplo de uso
  #  autocomplete "cliente", :hidden_id => "venta_cliente_id",
  #                            :input => f.hidden_field(:cliente_id),
  #                            :url => "/clientes/buscar_cliente",
  #                            :extra => :tipo, :extra_jquery => "$('input:radio[name:tipo]:checked')",
  #                            :value => (@venta.cliente_id.nil? ? nil : @venta.cliente.nombre) %>
  def autocomplete(nombre, args)
    extra = args[:extra] ? true : false
    args[:input] ||= '<input type="hidden" name="cliente_id" id="cliente_id">'
    args[:url] ||= ""
    args[:hidden_id] ||= "cliente_id"
    args[:extra] ||= ""
    args[:value] ||= ""
    args[:extra_jquery] ||= args[:extra]

    render :partial => "helpers/buscar",
      :locals => {
      :nombre => nombre,
      :input => args[:input],
      :hidden_id => args[:hidden_id],
      :url => args[:url],
      :extra => args[:extra],
      :have_extras => extra,
      :extra_jquery => args[:extra_jquery],
      :value => args[:value]
    }
  end

  # == Descripción
  # Crea un combo que estará realacionado a otro *input*, utilizando la libreria *JQuery*, al cambiar el valor
  # *input* automaticamente se refrescará el contenido del combo.
  # == Parametros
  # *display*:: atributo que se utilizará como Etiqueta a mostrar
  # *value*:: atributo que se utilizará como clave
  # *url*:: Url que realizará la busqueda y devolvera el *JSON* necesario
  # *linked*:: Nombre input asociado al combobox
  # *param*:: Como se llamará el parametro que se enviara al URL para realizar la busqueda
  #
  # == Ejemplo de uso
  #  linked_combo "cliente_categoria_id", :linked => "cliente_tipo_id",
  #      :url => "/categorias.json", :param => "tipo_id"
  def linked_combo(nombre, args)
    args[:url] ||= ""
    args[:display] ||= "nombre"
    args[:value] ||= "id"

    render :partial => "helpers/combo", :locals => {
      :nombre => nombre,
      :display => args[:display],
      :value => args[:value],
      :url => args[:url],
      :linked => args[:linked],
      :param => args[:param]
    }
  end

  # == Descripción
  # Agrega funcionalidad jqModal a un elemento por su ID para mostrar un grid de seleccion
  # == Parametros
  # *name*:: nombre del controller a  llamar
  # *opts*:: hash con diferentes opciones
  #
  # == Ejemplo de uso
  #  ajax_select "perfiles", :link => "#trigger_perfil", :id => :perfil_id, :name => :perfil_nombre 
  def ajax_select(name, opts)
    html = <<HTML
  <script>
    function seleccionar()
    {
      var id = $('##{opts[:tabla]}').getGridParam('selrow');
      if (id != null) {
        $('##{opts[:name]}').val($('##{opts[:tabla]}').getCell(id, 0));
        $('##{opts[:id]}').val(id);
      };
    };
  </script>
HTML
    html
  end

  # == Descripción
  # Funcion que trae los defauls del jqGrid
  # == Parametros
  # *opts*:: hash con diferentes opciones
  #
  # == Ejemplo de uso
  #  default_grid_options :model => "perfiles", :view => perfiles_path  
  def default_grid_options(opts)
    html = <<HTML
    rowNum:25,
    rowList:[10,25,40],
    datatype: 'json',
    pager: $('#pager_#{opts[:model]}'), 
HTML
    unless @window

    html += <<HTML
    ondblClickRow: function( rowid) {
      abrir(rowid);
      },
HTML
  end
  html += "}).navGrid('#pager_#{opts[:model]}',{edit:false,add:false,del:false, view:false},{},{},{},{multipleSearch:true})"
  if @window
    html += <<HTML
    .navButtonAdd('#pager_#{opts[:model]}',{
        caption:"Nuevo", buttonimg:"/images/agregar.png", onClickButton: function(){ nuevo()}, position:"last"
    }); 
HTML
  end
  html += <<HTML
  //Funcion para abrir el elemtno seleccionado
  function abrir(rowid){
    if (rowid == null){
      var id = $('#tabla_#{opts[:model]}').getGridParam('selrow');
    }else{
      var id = rowid;
    }
    if (id == null){
      alert('Seleccione un registro de la lista');
    } else {
      window.location = '#{opts[:view]}/' + id;
    };
  };
function nuevo(){
  jQuery("#tabla_#{opts[:model]}").editGridRow('new',{editData:{authenticity_token:"#{form_authenticity_token}"}}); 
  };
HTML
  html
end

def get_cargos_ajax
  html=<<HTML
<script>
  function getCargos(area_id)
  {

    if (area_id !=""){
      $('#select_cargos').empty()
      $.ajax({
        url:'#{url_for(:controller=>:areas,:action => :cargos)}',
        data: {id: area_id},
        type: 'post',
        dataType: 'script'
        });
    }

  }
</script>
HTML
  html
end
end
